安装
安装包下载
链接:https://pan.baidu.com/s/1tURBIZCZEh6Bp_H8r_iGsQ
提取码:yyds
--来自百度网盘超级会员V5的分享
安装
解压
tar -zxvf kafka_2.12-3.6.0.tgz -C ../module/
创建数据存放目录
mkdir -p /datadrive/kafka/log
修改配置文件
server.properties
vi /home/bigdata/module/kafka_2.12-3.6.0/config/server.properties
# 每台机器的id不一样
broker.id=0
# 核心数加1
num.network.threads=9
# 核心数乘2
num.io.threads=16
# 默认100M,修改成2倍,增加网络缓冲,提高吞吐量
socket.send.buffer.bytes=204800
# 默认100M,修改成2倍,增加网络缓冲,提高吞吐量
socket.receive.buffer.bytes=204800
# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600
# 副本从leader抓取消息的线程数目,默认是1
num.replica.fetchers=3
# 最小同步副本数
min.insync.replicas=2
# 数据到期删除策略
log.cleanup.policy=delete
#默认值是1M-1048576 (1 mebibyte),设置成5M
message.max.bytes=5242880
replica.fetch.min.bytes=1
#分区副本同步最大的消息默认1M-1048576 (1 mebibyte),设置成5M
replica.fetch.max.bytes=5242880
# 自动创建主题
auto.create.topics.enable=true
# 默认分区副本
default.replication.factor=3
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
log.dirs=/datadrive/kafka/log
# 默认分区
num.partitions=5
# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.
# This value is recommended to be increased for installations with data dirs located in RAID array.
num.recovery.threads.per.data.dir=3
############################# Internal Topic Settings #############################
#表示Kafka的内部topic __consumer_offsets只有一个副本。当该副本所在的broker宕机时,__consumer_offsets只有一份副本,该分区就会宕机。使用该分区存储消费分组offset位置的消费者均会收到影响,offset无法提交,从而导致生产者可以发送消息但消费者不可用。
# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state"
# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3.
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
############################# Log Flush Policy #############################
# 每当producer写入10000条消息时,刷数据到磁盘
log.flush.interval.messages=10000
# 每间隔1秒钟时间,刷数据到磁盘
log.flush.interval.ms=1000
############################# Log Retention Policy #############################
# 日志保留时长 7 天
log.retention.hours=168
# 段文件配置
log.segment.bytes=1073741824
# The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
zookeeper.connect=master1:2181,master2:2181,node1:2181/kafka
zookeeper.connection.timeout.ms=18000
############################# Group Coordinator Settings #############################
# 消费者组再均衡的延迟,默认是3秒
group.initial.rebalance.delay.ms=3
kafka-server-start.sh
修改配置文件
vi /home/bigdata/module/kafka_2.12-3.6.0/bin/kafka-server-start.sh
KAFKA_HEAP_OPTS="-Xmx16G -Xms16G"
启动
重启前修改其他集群机器
分发kafka到所有的机器
./xsync.sh /home/bigdata/module/kafka_2.12-3.6.0
分别修改机器的
vi /home/bigdata/module/kafka_2.12-3.6.0/config/server.properties
# 每台机器的id不一样
broker.id=1
集群启停脚本
vi kafka_cluster.sh
#!/bin/bash
case $1 in
"start"){
for i in master1 master2 node1
do
echo " --------启动 $i Kafka-------"
ssh $i "/home/bigdata/module/kafka_2.12-3.6.0/bin/kafka-server-start.sh -daemon /home/bigdata/module/kafka_2.12-3.6.0/config/server.properties "
done
};;
"stop"){
for i in master1 master2 node1
do
echo " --------停止 $i Kafka-------"
ssh $i "/home/bigdata/module/kafka_2.12-3.6.0/bin/kafka-server-stop.sh stop"
done
};;
esac
chmod 744 kafka_cluster.sh
./kafka_cluster.sh start
网络相关配置
不配置listeners的情况
#listeners = PLAINTEXT://your.hostname:9092
在zookeeper中,/brokers/{brokerid}/下面的信息示例
{
"listener_security_protocol_map": {
"PLAINTEXT": "PLAINTEXT"
},
"endpoints": ["PLAINTEXT://master1:9092"],
"jmx_port": -1,
"features": {},
"host": "master1",
"timestamp": "1698675472994",
"port": 9092,
"version": 5
}
那么如果其他的机器想访问,那么就需要配置/etc/hosts指定对应的域名,对应上面的master1才能够访问,比如
vi /etc/hosts
master1 xxx.xxx.xx(ip)
内外网访问的情况
下面 19002,19001,19000是同一个外网ip不同端口对集群的访问配置。
机器1
listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:19002
advertised.listeners=INTERNAL://内网ip:9092,EXTERNAL://外网ip:19002
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL
机器2
listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:19001
advertised.listeners=INTERNAL://内网ip:9092,EXTERNAL://外网ip:19001
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL
机器3
listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:19000
advertised.listeners=INTERNAL://内网ip:9092,EXTERNAL://外网ip:19000
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL
假设您在 listeners 中配置了不同的端口,例如 EXTERNAL://0.0.0.0:5001,而在 advertised.listeners 中配置了 EXTERNAL://外网ip:5000,那么 Kafka 代理将监听 5001 端口,但客户端连接时将使用 5000 端口,这将导致连接失败。因此,在同一监听器下,listeners 和 advertised.listeners 中的端口号必须相同,以确保客户端能够成功连接 Kafka 代理。
相关链接
Kafka每一台机器都有外网地址的时候
listeners=INTERNAL://0.0.0.0:9092
advertised.listeners=INTERNAL://172.16.7.237:9092
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL